/**
 * <p>Copyright: Copyright (c) 2014</p>
 * <p>Company: UMP Technology Co. Ltd</p>
 * <p>2014年5月28日</p>
 * @author Zhang Wensheng
 */
package com.xianl.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;

/**
 * desc: 日期工具类
 * @author Zhang Wensheng
 * date:2014年5月28日
 */
public class DateTimeUtil {
	/** yyyyMMdd */
	public static final String SDF_DATE8 = "yyyyMMdd";
	/** yyyy-MM-dd */
	public static final String SDF_DATE10 = "yyyy-MM-dd";
	/** yyyy年MM月dd日 */
	public static final String SDF_DATE10_CN = "yyyy\u5e74MM\u6708dd\u65e5";
	/** HHmmss */
	public static final String SDF_TIME6 = "HHmmss"; 
	/** HH时mm分ss秒 */
	public static final String SDF_TIME6_CN = "HH\u65f6mm\u5206ss\u79d2"; 
	/** yyyyMMddHHmmss */
	public static final String SDF_TIME14 = "yyyyMMddHHmmss"; 
	/** yyyy年MM月dd日HH时mm分ss秒 */
	public static final String SDF_TIME14_CN = "yyyy\u5e74MM\u6708dd\u65e5HH\u65f6mm\u5206ss\u79d2"; 
	public static final long daymm = 1000*60*60*24;
	
	
	/**
	* desc: 获取当前系统时间
	* @author: Zhang Wensheng ,  2014年5月28日 下午7:11:52 
	* @return
	*/
	public static Timestamp getCurrentTime(){
		return new Timestamp(System.currentTimeMillis());
	}
	
	/**
	* desc: 计数天数
	* @author: Zhang Wensheng ,2014年9月17日 上午11:05:07
	* @param t
	* @return
	* @return Timestamp
	*/
	public static Timestamp getTime(long t){
		return new Timestamp(System.currentTimeMillis() + t);
	}
	
	/**
	* desc: 获取 yyyyMMdd
	* @author: Zhang Wensheng ,  2014年5月28日 下午7:44:27 
	* @return
	*/
	public static String getDate8(){
		return getFormatD8().format(getCurrentTime());
	}
	
	/**
	* desc: 获取8位数的日期
	* @author: Zhang Wensheng ,2014年9月17日 上午11:05:30
	* @param day 日期偏移量，前一天 day=-1，后一天 day=1， 今天 day=0
	* @return
	* @return String yyyyMMdd
	*/
	public static String getDate8(int day){
		return getFormatD8().format(getTime(day * daymm));
	}
	
	
	
	/**
	* desc: 获取 HHmmss
	* @author: Zhang Wensheng ,  2014年5月28日 下午7:44:43 
	* @return
	*/
	public static String getTime6(){
		return getFormatT6().format(getCurrentTime());
	}
	
	public static String getDate8(long time){
		Timestamp ts = new Timestamp(time);
		return getFormatD8().format(ts);
	}
	
	public static String getDate8(Timestamp timestamp){
		return getFormatD8().format(timestamp);
	}
	
	public static String getDate10(Timestamp timestamp){
		return getFormate10().format(timestamp);
	}
	
	public static String getDate10(){
		return getDate10(getCurrentTime());
	}
	
	public static String getDate10(long time){
		Timestamp ts = new Timestamp(time);
		return getFormate10().format(ts);
	}
	
	/**
	* desc: 返回一定格式的日期
	* @author: Zhang Wensheng ,2014年10月9日 下午3:55:53
	* @param formate
	* @param currentTime
	* @return
	* @return String
	*/
	public static String getDate4Formate(String formate, Long currentTime){
		SimpleDateFormat sdf = new SimpleDateFormat(formate);
		return sdf.format(new Timestamp(currentTime));
	}
	
	/**
	* desc: 获取10位数的日期
	* @author: Zhang Wensheng ,2014年9月17日 上午11:05:30
	* @param day 日期偏移量，前一天 day=-1，后一天 day=1， 今天 day=0
	* @return
	* @return String yyyy-MM-dd
	*/
	public static String getDate10(int day){
		return getFormate10().format(getTime(day * daymm));
	}
	
	/**
	* desc: 获取 yyyyMMddHHmmss
	* @author: Zhang Wensheng ,  2014年5月28日 下午7:44:55 
	* @return
	*/
	public static String getTime14(){
		return getFormatT14().format(getCurrentTime());
	}
	
	private static ThreadLocal<SimpleDateFormat> threadLocal_sdf8 = new ThreadLocal<SimpleDateFormat>(){  
        protected synchronized SimpleDateFormat initialValue() {  
            return new SimpleDateFormat(SDF_DATE8);  
        }  
    };
	
    private static SimpleDateFormat getFormatD8(){ 
        return threadLocal_sdf8.get();  
    }
    private static ThreadLocal<SimpleDateFormat> threadLocal_sdf6 = new ThreadLocal<SimpleDateFormat>(){  
        protected synchronized SimpleDateFormat initialValue() {  
            return new SimpleDateFormat(SDF_TIME6);  
        }  
    };
    private static SimpleDateFormat getFormatT6(){ 
    	return threadLocal_sdf6.get();  
    }
    
    private static ThreadLocal<SimpleDateFormat> threadLocal_sdf14 = new ThreadLocal<SimpleDateFormat>(){  
        protected synchronized SimpleDateFormat initialValue() {  
            return new SimpleDateFormat(SDF_TIME14);  
        }  
    };
    private static SimpleDateFormat getFormatT14(){ 
    	return threadLocal_sdf14.get();  
    }
    
    private static ThreadLocal<SimpleDateFormat> threadLocal_sdf10 = new ThreadLocal<SimpleDateFormat>(){
    	protected synchronized SimpleDateFormat initialValue() {  
            return new SimpleDateFormat(SDF_DATE10);  
        }
    };
    
    public static SimpleDateFormat getFormate10(){
    	return threadLocal_sdf10.get();
    }
    
    
    public static void main(String[] args) {
		System.out.println(getDate4Formate(SDF_TIME14_CN, System.currentTimeMillis()));
	}

}
